// main.cpp : 定义控制台应用程序的入口点。
// Test: 
//		i+i*i
//		ii*i,  
//		i**i,  
//		(i+i, 
//		+i*+i
//
// Grammer: E -> TA
//          A -> +TA | $
//          T -> FB
//          B -> *FB | $
//          F -> (E) | i

#include "stdafx.h"
#include "./lib/Syntax.h"
#include "./set/FirstWord.h"
#include "./set/FollowWord.h"
#include "./table/ForseeTable.h"
#include "./set/Status.h"
#include "./anaylsis/ForseeAnalysis.h"
#include "./anaylsis/ReduceAnalysis.h"


int main()
{
	string key[] = // {"A", "B", "C", "D", "E"};
		// { "E", "T", "F" }; 
					 { "E", "A", "T", "B", "F" };
	string content[] = // {"BCc|gDB", "bCDE|$", "DaB|ca", "dD|$", "gAf|c"};
		// { "E+T|T", "T*F|F", "(E)|i" }; 
		 { "TA", "+TA|$", "FB", "*FB|$", "(E)|i" };

	compile::Syntax s(key, content, 5);
	compile::FirstWord first(&s);
	first.printFirst();
	compile::FollowWord follow(&s, &first);
	follow.printFollow();
	compile::Status sa(&s, &follow);
	sa.print();
	// sa.~Status();
	compile::ReduceAnalysis reduce("(i+i)*i+i+i", &sa);
	// compile::ReduceAnalysis reduce("(i+i", &sa);
	// compile::ForseeTable forsee(&first, &follow, &s);
	// forsee.printTable();

	// compile::ForseeAnalysis analysis("i+i*i", &forsee);
	// ForseeAnalysis  analysis("ii*i", &forsee);
	// ForseeAnalysis analysis("i**i", &forsee);
	// ForseeAnalysis analysis("(i+i", &forsee);
	// ForseeAnalysis analysis("+i*+i", &forsee);
	system("pause");
    return 0;
}

 